home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / basic / pbtool.exe / SMSORT.BAS < prev    next >
BASIC Source File  |  1991-07-30  |  4KB  |  111 lines

  1. '----------------------------------------------------------
  2. '  PROGRAM: SMSORT1.BAS        PROGRAMMER: A. KELLETT
  3. '  DATE-WRITTEN: 07/30/91
  4. '  USING POWER BASIC V2.10A
  5. '
  6. '  THIS PROGRAM DEMONSTRATES A SHELL-METZNER SORT
  7. '
  8. '  VERSION: 0.00    LAST UPDATED: 00/00/00
  9. '----------------------------------------------------------
  10. CLS:LOCATE 1,25:PRINT "A TEST PROGRAM FOR A SHELL-METZNER SORT"
  11. X$ = "":N% = 0
  12. LOCATE 3,5:PRINT "ITEMS TO BE SORTED: "
  13. DO WHILE X$ <> "EOD"
  14.    READ X$
  15.    IF X$ <> "EOD" THEN
  16.       N% = N% + 1
  17.    END IF
  18.    LOCATE 3,26:PRINT USING "#,###";N%
  19. WEND
  20. RESTORE :REM *** RESTORE DATA POINTER TO FIRST DATA ITEM
  21. DIM NAMES$(1:N%)
  22. DELAY 1.5
  23. LOCATE 5,5:PRINT "ITEMS READ INTO TABLE: "
  24. FOR I% = 1 TO N%
  25.    READ NAMES$(I%)
  26.    LOCATE 5,29:PRINT USING "#,###";I%
  27. NEXT I%
  28. DELAY 1.5
  29.  
  30. CALL SORTNAMES
  31.  
  32. '---------- DISPLAY RESULTS OF SORT --------------------------
  33. CLS
  34. FOR I = 1 TO N%
  35.    PRINT USING "#,### \                   \";I,NAMES$(I)
  36.    IF I/15 = INT(I/15) THEN
  37.       DELAY 2 :REM *** PAUSE FOR EVERY 15 ITEMS DISPLAYED ***
  38.    END IF
  39. NEXT I
  40. PRINT USING "IT TOOK ##.### SECONDS FOR THE SORT ";(ELAPSEDTIME! / 100000)
  41. PRINT USING "TIME STARTED: \       \  AND TIME FINISHED: \       \";_
  42.   STARTTIME$, ENDTIME$
  43.  
  44. END
  45. '
  46. '
  47. ' A SHELL-METZNER SORT TO SORT STRINGS IN ASCENDING ORDER.
  48. '
  49. ' To use: this module uses names$(),starttime$,endtime$,n,interval,
  50. '         temp$,diff,item1,item2. item2,diff,temp are local variables.
  51. '         all others are shared.  names$() must be dimensioned and
  52. '         filled with the strings to be sorted. n is the size of
  53. '         the array to be sorted. starttime$ and endtime$ are
  54. '         coded merely for the convenience of timing the sort.
  55. '
  56. '      ---- This module uses a shell-metzner sort, developed by ------
  57. '      ---- Donald Shell  &  Marlene  Metzner.  A  high-speed , ------
  58. '      ---- intelligent  sort.  This  version  translated  from ------
  59. '      ---- a  Commodore   version   by   Raeto   Collin  West. ------
  60. SUB SORTNAMES
  61.    shared names$(),starttime$,endtime$,n%
  62.    shared elapsedtime!:mtimer:starttime$ = time$
  63.    m% = n%
  64.    label1:
  65.     m% = fix(m%/2)
  66.    IF m% = 0 THEN
  67.       elapsedtime! = mtimer
  68.       endtime$ = time$
  69.       exit sub
  70.    END IF
  71.    j% = 1:k% = n% - m%
  72.    label3:
  73.     i% = j%
  74.    label2:
  75.     l% = i% + m%
  76.    IF names$(i%) > names$(l%) THEN
  77.       swap names$(i%), names$(l%)
  78.       i% = i% - m%
  79.       IF i% > 0 THEN
  80.          goto label2
  81.       END IF
  82.    END IF
  83.    j% = j% + 1
  84.    IF j% > k% THEN
  85.       goto label1
  86.    END IF
  87.    goto label3
  88. END SUB
  89. '
  90. '            NAMES HELD IN DATA STATEMENTS
  91. '--------------------------------------------------------------------
  92. DATA "BILLYBOB","ZEUS","ZENO","LARRY","DARRYL","DARRELL","JANE"
  93. DATA "EDWARD","EDGAR","AUGUSTUS","ANTHONY","STEPHANIE","STEVE"
  94. DATA "BOB","ANGEL","JEAN","TOMMY","NANSI","SCOTT","BILLY","LINDA"
  95. DATA "LAUREN","SCOTTY","JILL","LIZ","ELIZABETH","WHITNEY","JOSEPH"
  96. DATA "HANNAH","CINDY","JOHN","MYRA","PETER","LANA","JASON"
  97. DATA "MIKE","HOWARD","GARFIELD","SNOOPY","CHARLIE","LINUS"
  98. DATA "LUCY","ANDY","JIMBOB","BETTY","JIMMIE","JAMES","WILLIAM"
  99. DATA "DAVID","ABBYE","SHIRLEY","LEONARD","LOUISE","KEVIN","JANICE"
  100. DATA "PHIL","LYNDA","KATHY","DEMYRA","LISA","CATHY","CHARLEEN"
  101. DATA "CHRIS","JOHNNY","JOANN","JACK","IRENE","WANDA","ANNE"
  102. DATA "BILL","RONNY","EMILY","JANE","JOAN","BETSY","ELAINE"
  103. DATA "HERBERT","MICHAEL","DANNY","DUSTY","YVONNE","VANNA"
  104. DATA "PAT","PATRICK","PATSY","PATTY","PENNY","OLIVIA","OSCAR"
  105. DATA "GERALDINE","MANDY","MISTY","NELLIE","MICHELLE","JENNY"
  106. DATA "FRANK","FANNY","RANDY","JERRY","CAROL","CAROLINE","LORETTA"
  107. DATA "GILBERT","ESTHER","JIM","SUE","CHARLES","BRYAN","FARRELL"
  108. DATA "BARRY","THOMAS","RAMOSES"
  109.  
  110. DATA "DONALD","MARLENE","EOD"
  111.